/**
 * @author Zvonimir Pavlić
 */

/**Funkcija za izdvajanje oznaka labeliranih redova
 * 
 * @param {Object} labela popis labeliranih redova i stupaca
 */
function RetciIzLabele(labela)
{
	if (labela == null) return '';
	labela = new String(labela);
	//alert ("labela" +labela);
	
	var retci = new RegExp('[0-9]+r', "g");
	var labeleRedaka = labela.match(retci);
	if (labeleRedaka != null) {	//ako su označeni samo stupci
		var povratak = labeleRedaka.toString();
		povratak = povratak.replace(/r/g, '');
		return povratak;
	}
	return '';
	//alert(povratak);
}

/**Funkcija za izdvajanje oznaka labeliranih stupaca
 * 
 * @param {Object} labela popis labeliranih redova i stupaca
 */
function StupciIzLabele(labela)
{
	if (labela == null) return '';
	labela = new String(labela);
	var retci = new RegExp('[0-9]+s', "g");
	var labeleStupaca = labela.match(retci);
	if (labeleStupaca != null) {	//ako su označeni samo retci
		var povratak = labeleStupaca.toString();
		povratak = povratak.replace(/s/g, '');
		return povratak;
	}
	return '';
}

/**funkcija za uklanjanje labela
 * 
 * @param {Object} podatci matrica podataka iz koje se uklanjaju labele
 * @param {Object} r broj redaka matrice podataka
 * @param {Object} s broj stupaca matrice podataka
 * @param {Object} labeliraniRetci niz sa oznakama labeliranih redova
 * @param {Object} labeliraniStupci niz sa oznakama labeliranih stupaca
 */
function UkloniLabele(podatci, r,s, labeliraniRetci, labeliraniStupci)
{
	//alert("podatci: " + podatci + "   r " + r + "   s "+s+"  lr "+labeliraniRetci+"  ls "+labeliraniStupci);
	labeliraniRetci = labeliraniRetci.toString();
	var retci = labeliraniRetci.split(",");
	labeliraniStupci = labeliraniStupci.toString();
	var stupci = labeliraniStupci.split(",");
	podatci = podatci.toString();
	var podatak = podatci.split("|");
	
	for (var i=0; i<r; i++)
	{
		for(var j=0; j<s; j++)
		{	
			if ((stupci.indexOf(j.toString()) != -1)) {
				podatak[parseInt(j) + (i * (parseInt(s)))] = '';
			}
			if (retci.indexOf(i.toString()) != -1) {
				podatak[parseInt(j) + (i * (parseInt(s)))] = '';
			}
			
			
		}
	}

	//alert(podatci+"    "+podatak);
	/*var rezultat = podatak.toString();
	rezultat = rezultat.replace(/[,]+/g,"|");
	rezultat = rezultat.replace(/^[|]/, "");
	//alert("rez  "+rezultat);*/
	return podatak;

}

/**Funkcija za parsiranje gyros zapisa podataka
 * vraća riječnik podataka
 * @param {Object} gyrosTablica podatci zapisani u Gyros formatu
 */
function ObradbaUlaznihPodataka(gyrosTablica)
{
	var regularacZaPodatke = new RegExp("<m([0-9]+):([0-9]+);([^>]*)>([^>]+)</m>", "ig");
	
	if (gyrosTablica.toString().match(regularacZaPodatke) == null )
	{
		return null;
	}
	//odvajanje podataka regularnim izrazom
	var r = RegExp.$1;
	var s = RegExp.$2;
	var labele = RegExp.$3;
	var podatci = RegExp.$4;
	
	podatci = new String(podatci);
	var retci = parseInt(r);
	var stupci = parseInt(s);
	
/*
	//dohvat označenih redaka i stupaca
	var labeliraniRetci = RetciIzLabele(labele);
	var labeliraniStupci = StupciIzLabele(labele);
	labeliraniRetci = new String(labeliraniRetci);
	labeliraniStupci = new String(labeliraniStupci);
	
	//uklanjaju se labele iz tblice
	var retci1 = labeliraniRetci.split(',');
	var stupci1 = labeliraniStupci.split(',');
	var smanjiRetke1;
	var smanjiStupce1;
	if (labeliraniRetci=='') smanjiRetke1 = 0;
	else smanjiRetke1 = retci1.length;
	if (labeliraniStupci=='') smanjiStupce1 = 0;
	else smanjiStupce1 = stupci1.length;
	var tablica = new Array;

	tablica = UkloniLabele(podatci, retci, stupci, labeliraniRetci, -1);*/

	podatci = podatci.replace("null", "0", "g");
	podatci = podatci.replace(' ','', "g");
	var tablica = podatci.split("|");
	//retci -= smanjiRetke1;
	//stupci -= smanjiStupce1;

	//generira se riječnik podataka
	var izlaz = new Array;
	
	for (var i=0; i<retci; i++)
	{
		var kljuc = new String(tablica[i*stupci]);
		izlaz[kljuc] = tablica[i * stupci + 1];
	}
	
	return izlaz;
}

function IzracunParametara(podatci)
{
	var p = new Array;
	p = ObradbaUlaznihPodataka(podatci);

	var debt_capital;
	var debt_equity;
	var long_dept_capital;
	var totalDebtRatio;
	var liabilitiestoEquityRatio;
	var interestCoverage;
	var financialLeverageMultiplier;
	
	//debt-capital
	if (parseFloat(p["TotalAssets"])!=0)
	{
		debt_capital = 	parseFloat(p["TotalLiabilities"])/
						parseFloat(p["TotalAssets"]);
	}
	else debt_capital = "null";
	
	//debt-equity
	if (parseFloat(p["TotalEquity"])!=0)
	{
		debt_equity = 	parseFloat(p["TotalLongTermDebt"])/
						parseFloat(p["TotalEquity"]);
	}
	else debt_equity = "null";
	
	//Long Term Dept/Total Long Term Capital Ratio
	var nazivnik = parseFloat(p["TotalLongTermDebt"]) + parseFloat(p["TotalEquity"]);
	if (nazivnik !=0)
	{
		long_dept_capital = parseFloat(p["TotalLongTermDebt"])/
							nazivnik;
	}
	else long_dept_capital = "null";
	
	//totalDebtRatio
	nazivnik += parseFloat(p["NotesPayable/ShortTermDebt"]);
	if (nazivnik != 0)
	{
		totalDebtRatio = (parseFloat(p["TotalCurrentLiabilities"]) + parseFloat(p["TotalLongTermDebt"]))/
						  nazivnik;
	}
	else totalDebtRatio = "null";
	
	//liabilitiestoEquityRatio
	if (parseFloat(p["TotalEquity"])!=0)
	{
		liabilitiestoEquityRatio = 	parseFloat(p["TotalLiabilities"])/
									parseFloat(p["TotalEquity"]);
	}
	else liabilitiestoEquityRatio = "null";
	
	//interestCoverage
	if (parseFloat(p["InterestIncome(Expense),NetNon-Operating"]) != 0)
	{
		interestCoverage = 	parseFloat(p["OperatingIncome"])/
							parseFloat(p["InterestIncome(Expense),NetNon-Operating"]);
	}
	else interestCoverage = "null";
	
	//financialLeverageMultiplier
	if (parseFloat(p["CommonStock,Total"])!=0)
	{
		financialLeverageMultiplier = 	parseFloat(p["TotalAssets"])/
										parseFloat(p["CommonStock,Total"])
	}
	else financialLeverageMultiplier = "null";
	
	//zapisivanje izračunatih parametara u GYROS zapis
	izlaz = "<m7:2; 0s>debt-capital|" + debt_capital.toString()
			+ "|debt-equity|" + debt_equity.toString()
			+ "|Long Term Dept/Total Long Term Capital Ratio|" + long_dept_capital.toString()
			+ "|total Debt Ratio|" + totalDebtRatio.toString()
			+ "|liabilities to Equity Ratio|" + liabilitiestoEquityRatio.toString()
			+ "|interest Coverage|"+ interestCoverage.toString()
			+ "|financial Leverage Multiplier|" + financialLeverageMultiplier.toString()
			+ "</m>";

	return izlaz;
	
}

function Glavni(parametar)
{
	var ulaz = document.getElementById("ulaz");
	var izlaz = document.getElementById("izlaz");
	var tekst = new String(ulaz.value);

	izlaz.value = IzracunParametara(tekst);

}
